VSCodeとDockerでMacにGolangの開発環境を作成する
こんにちは、CX事業本部の夏目です。
Golangは最近人気の言語で手を出そうとは思っていたのですが、環境構築がいまいちよくわからなくてできてませんでした。
(goenvを使ってGolangをインストールするときGOPATHはどうしたらいいとかよくわからなかったのです)
今日はVisualCodeとDockerを使って、Golangの開発環境をMac上に作成しようと思います。
環境構築
事前準備
VSCodeとDockerをインストールします。
- Visual Studio Code - Code Editing. Redefined
- Docker Desktop for Mac and Windows | Docker
- Version 2.0以上
拡張機能のインストール
VSCodeのExtension "Remote-Containers"を使用して開発環境を作ろうと思います。
Microsoft謹製のExtensionで、Docker Container内で開発をしつつエディターはMacのネイティブのままにできます。
エディターはMac上ですが、VSCodeのTerminalはDocker Container内で動くようになります。
Developing inside a Container using Visual Studio Code Remote Development
使い方や設定の詳細が気になる方は上記サイトで確認してください。
Remote-Containersの設定をする
開発を行うディレクトリをVSCodeで開いて、設定を行います。
Window左下のこのマークをクリックして、Remote-Containers: Add Development Container Configuration Files...
を選択します。
Remote-Containers: Add Development Container Configuration Files...
を選択すると、何の開発環境を作るのか聞かれるのでgo
と入力し、Go golang:1
を選択します。
すると、環境の設定に必要なファイルが生成されます。
この状態で、右下のReopen in Container
ボタンを押すか、左下のアイコンをクリックしてRemote-Containers: Reopen Folder in Container
を選択すると、VSCodeがリロードされ、開発用のコンテナの作成等が行われます。
(作成中の様子。右下のdetails
をクリックすると作成の様子を見ることができる)
作成が終了すると、ファイル一覧に先程の設定ファイルが見えるようになる。
1: Dev Containers
の右のプラスアイコンをクリックすると、操作できるターミナルが開くので、とりあえずGolangのバージョンを表示させてみる。
これでGoの開発環境が使えるようになりました。
おまけ
.devcontainers.json
開発用のコンテナの設定を記述するファイルです。
// See https://aka.ms/vscode-remote/devcontainer.json for format details. { "name": "Go", "dockerFile": "Dockerfile", "runArgs": [ "--cap-add=SYS_PTRACE", "--security-opt", "seccomp=unconfined" ], // Uncomment the next line if you want to publish any ports. // "appPort": [], // Uncomment the next line to run commands after the container is created. // "postCreateCommand": "go version", "extensions": [ "ms-vscode.go" ], "settings": { "go.gopath": "/go" } }
(リファレンス)
例えば、extensions
という項目でコンテナ内のVSCodeに最初からインストールするExtensionを指定することができます。
またデフォルトでは、Dockerfileを使って開発用のコンテナを作成していますが、docker-composeをコンテナの作成をすることもできます。
Golangのパッケージ管理にdepを使う場合
デフォルトの設定では、/workspace/{元々のディレクトリ名}
というコンテナ上のディレクトリで開発を行うことになります。
しかし、GOPATHは/go
が設定されています。
パッケージ管理ツールdepではプロジェクトのディレクトリが$GOPATH/src/
配下でなければいけません。
そのため、デフォルトの設定ではdepは使えません。
devcontainers.jsonに次の値を設定して、作業を行うディレクトリを変更します。
{ "workspaceFolder": "/go/src/{好きなディレクトリ名}", "workspaceMount": "src={VSCodeで開いているディレクトリのフルパス},dst=/go/src/{好きなディレクトリ名},type=bind" }
workspaceFolder
はコンテナ内で開発を行うディレクトリのスペースを指定します。
workspaceMount
はdockrコマンドの--mount
オプションの内容です。
ここで、srcにVSCodeで開いているディレクトリのフルパスを、dstにコンテナ内のフルパスを指定します。
そのため、dstの値とworkspaceFolder
の値は同じ値にします。
こうすることで、開発を行うディレクトリを$GOPATH/src
配下にすることができるのでdepを使えるようになります。
まとめ
VSCodeのExtension Remote-Containers
を使うことで、Docker Container上にGolangの開発環境を構築することができました。
Remote-Containers
はGolang以外にも使用できるので、VSCodeを使うのであればMac上の環境を汚さずに様々な開発環境を構築できます。
使ってみてください。